//package com.inspur.edp.cef.generator.coreGenerator.base.entitygen.method;
//
//import com.inspur.edp.caf.generator.baseInfo.ParameterInfo;
//import com.inspur.edp.caf.generator.baseInfo.TypeInfo;
//import com.inspur.edp.caf.generator.method.ClassMethodGenerator;
//import com.inspur.edp.cef.rtgenerator.utils.GeneratorUtil;
//import java.lang.reflect.Parameter;
//import java.util.ArrayList;
//import org.eclipse.jdt.core.dom.Block;
//import org.eclipse.jdt.core.dom.ClassInstanceCreation;
//import org.eclipse.jdt.core.dom.MethodInvocation;
//import org.eclipse.jdt.core.dom.Modifier;
//import org.eclipse.jdt.core.dom.ReturnStatement;
//import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
//import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
//
//public class ActionGenerator extends ClassMethodGenerator {
//
//  ///#region 属性与初始化
//  private java.lang.reflect.Method privateMethodInfo;
//  private java.lang.Class privateBelongType;
//
//  public ActionGenerator(java.lang.reflect.Method methodInfo, java.lang.Class belongType) {
//    privateMethodInfo = methodInfo;
//    privateBelongType = belongType;
//  }
//
//  protected final java.lang.reflect.Method getMethodInfo() {
//    return privateMethodInfo;
//  }
//
//  protected final java.lang.Class getBelongType() {
//    return privateBelongType;
//  }

//  ///#endregion
//

//  ///#region Impl
//  @Override
//  protected final String getMethodName() {
//    return getMethodInfo().getName();
//  }
//
//  @Override
//  protected TypeInfo getReturnType() {
//    return new TypeInfo(getMethodInfo().getReturnType().getTypeName());
//  }
//
//  @Override
//  protected ArrayList<Modifier.ModifierKeyword> getAccessModifiers() {
//    ArrayList<Modifier.ModifierKeyword> list = new ArrayList<>();
//    list.add(Modifier.ModifierKeyword.PUBLIC_KEYWORD);
//    return list;
//  }
//
//  @Override
//  protected ArrayList<ParameterInfo> getParameterCollection() {
//    ArrayList<ParameterInfo> list = new ArrayList<>();
//    for (Parameter paramInfo : getMethodInfo().getParameters()) {
//      list.add(GeneratorUtil.buildParameterInfo(paramInfo));
//    }
//    return list;
//  }
//
//  @Override
//  protected Block buildMethodBody() {
//    String varName = "impl";
//    Block block = ast.newBlock();
//    addCreateStatement(block, varName);
//    addSetContextStatement(block, varName);
//    addInvokeStatement(block, varName);
//    return block;
//  }
//
//  private void addCreateStatement(Block block, String varName) {
//    VariableDeclarationFragment variableDeclarationFragment = ast.newVariableDeclarationFragment();
//    variableDeclarationFragment.setName(ast.newSimpleName(varName));
//
//    ClassInstanceCreation classInstanceCreation = ast.newClassInstanceCreation();
//    classInstanceCreation.setType(ast.newSimpleType(ast.newName(getBelongType().getTypeName())));
//    variableDeclarationFragment.setInitializer(classInstanceCreation);
//
//    VariableDeclarationStatement variableDeclarationStatement = ast
//        .newVariableDeclarationStatement(variableDeclarationFragment);
//    variableDeclarationStatement
//        .setType(ast.newSimpleType(ast.newName(getBelongType().getTypeName())));
//
//    block.statements().add(variableDeclarationStatement);
//  }
//
//  private void addSetContextStatement(Block block, String varName) {
//    MethodInvocation setContextInvocation = ast.newMethodInvocation();
//    setContextInvocation.setExpression(ast.newSimpleName(varName));
//    setContextInvocation.setName(ast.newSimpleName("setBEContext"));
//    addSetContextArguments(setContextInvocation, varName);
//
//    block.statements().add(ast.newExpressionStatement(setContextInvocation));
//  }
//
//  private void addSetContextArguments(MethodInvocation setContextInvocation, String varName) {
//    MethodInvocation getContextInvocation = ast.newMethodInvocation();
//    getContextInvocation.setExpression(ast.newThisExpression());
//    getContextInvocation.setName(ast.newSimpleName("getBEContext"));
//    setContextInvocation.arguments().add(getContextInvocation);
//  }
//
//  private void addInvokeStatement(Block block, String varName) {
//    MethodInvocation methodInvocation = ast.newMethodInvocation();
//    methodInvocation.setExpression(ast.newSimpleName(varName));
//    methodInvocation.setName(ast.newSimpleName(getMethodName()));
//    for (Parameter parameter : getMethodInfo().getParameters()) {
//      methodInvocation.arguments().add(ast.newName(parameter.getName()));
//    }
//
//    if (getMethodInfo().getReturnType() == void.class) {
//      block.statements().add(ast.newExpressionStatement(methodInvocation));
//    } else {
//      ReturnStatement returnStatement = ast.newReturnStatement();
//      returnStatement.setExpression(methodInvocation);
//      block.statements().add(returnStatement);
//    }
//  }
//}